﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Work06._01
{
    class Program
    {
        static Student s1 = new Student("1", "张一", "19");
        static Student s2 = new Student("2", "张二", "29");
        static Student s3 = new Student("3", "张三", "39");
        static Student s4 = new Student("5", "张四", "49");
        static Student s5 = new Student("4", "张五", "59");
        static List<Student> list = new List<Student> { s1, s2, s3, s4, s5 };
        static Hashtable ht = new Hashtable();
        
        static void Main(string[] args)
        {
            // 添加3个类，分别实现 IComparer<T>接口，实现对Student类的三个字段的排序。
            //1、学生类：学号、姓名、年龄
            //2、请选择：1、添加学生信息。2、查询学生信息。
            //3、重复的学号不能添加。
            //4、查询学生信息功能中有：1、查询所有（按学号排序）2、查询所有（按姓名排序），
            //                         3、查询所有（按年龄排序）4、按学号查询（查没有，则打印查无此学生）
            //                         5、退出

            Console.WriteLine("请选择：1.添加学生信息 2.查询学生信息");
            int num = int.Parse(Console.ReadLine());





            switch (num)
            {
                case 1:
                    addinfo();
                    break;
                case 2:
                    inquire(list);
                    break;
                default:
                    Console.WriteLine("请重新输入！");
                    break;
            }
        }

        private static void addinfo()
        {

            Console.WriteLine("请输入要添加的学生的学号：");
            string stuNO = Console.ReadLine();
            Console.WriteLine("请输入要添加的学生的姓名：");
            string stuName = Console.ReadLine();
            Console.WriteLine("请输入要添加的学生的年龄：");
            string age = Console.ReadLine();
            Student stu = new Student(stuNO, stuName, age);
            if (ht.ContainsKey(stuNO))
            {
                Console.WriteLine("该学生已存在！");

            }
            else
            {
                ht.Add(stuNO, stuNO);
                list.Add(stu);

            }
            Console.WriteLine("是否需要继续（y/n）");
            string YN = Console.ReadLine();
            if (YN.Equals("n"))
            {
                
                inquire(list);
            }
            else if (YN.Equals("y"))
            {
                addinfo();
            }
            else
            {
                Console.WriteLine("输入正确的指令！（是 or 否）");
            }
          

        }

        private static void inquire(List<Student> stu)
        {
            ht.Add(s1.stuNO, s1);
            ht.Add(s2.stuNO, s2);
            ht.Add(s3.stuNO, s3);
            ht.Add(s4.stuNO, s4);
            ht.Add(s5.stuNO, s5);
            
            Console.WriteLine("1、查询所有（按学号排序）");
            Console.WriteLine("2、查询所有（按姓名排序）");
            Console.WriteLine("3、查询所有（按年龄排序）");
            Console.WriteLine("4、按学号查询（查没有，则打印查无此学生）");
            Console.WriteLine("5、退出");


            int num1 = int.Parse(Console.ReadLine());
            switch (num1)
            {
                case 1:
                    list.Sort(new StunoSort());                  
                    foreach (Student item in stu)
                    {
                        Console.WriteLine(item);
                    }
                    break;
                case 2:
                    list.Sort(new StuNameSort());
                    foreach (Student item in stu)
                    {
                        Console.WriteLine(item);
                    }
                    break;
                case 3:
                    list.Sort(new AgeSort());
                    foreach (Student item in stu)
                    {
                        Console.WriteLine(item);
                    }
                    break;
                case 4:
                    Console.WriteLine("请输入要查找的学号：");
                    string no = Console.ReadLine();
                    if (ht.Contains(no))
                    {
                        Console.WriteLine(ht[no]);
                    }
                    else
                    {
                        Console.WriteLine("没有该学号！");
                    }
                    break;
                case 5:
                    Console.WriteLine("程序退出成功！！！");
                    break;
                default:
                    break;
            }

        }
    }
}
